parser grammar CalcParser;

options {
  language = Java;
  tokenVocab = CalcLexer;
  output = AST;
  ASTLabelType = MiArbol;
}

tokens {
    LISTA_INST;
}

@header  {
package PL.prac10;
}
@rulecatch {catch (RecognitionException rre) {
  throw rre;}
 }
 
entrada: instrucciones* EOF -> ^(LISTA_INST (instrucciones)*);
instrucciones: (operadores|asignacion) SEPARADOR!;
operadores: expresion (OP_LOGICOS expresion)*;
asignacion: IDENT IGUAL^ expresion;
expresion: exp_mult ((MAS^|MENOS^) exp_mult)*;
exp_mult: exp_base ((POR^|ENTRE^)exp_base)*;
exp_base: (NUMERO) |(IDENT) | (APARENTESIS! expresion CPARENTESIS!);